#include <vector>
#include <set>
#include <iostream>

#include "../Sampler.h"
#include "NDArray.h"

using namespace std;

int main( int argc, char **argv )
{
	double _data[]	     = { 1,	 2,	 3,	 4,	 5,	 6,	 7,	 8,	 9,	 10,
				11,	12,	13,	14,	15,	16,	17,	18,	19,	 20,
				21,	22,	23,	24,	25,	26,	27,	28,	29,	 30,
				31,	32,	33,	34,	35,	36,	37,	38,	39,	 40,
				41,	42,	43,	44,	45,	46,	47,	48,	49,	 50,
				51,	52,	53,	54,	55,	56,	57,	58,	59,	 60,
				61,	62,	63,	64,	65,	66,	67,	68,	69,	 70,
				71,	72,	73,	74,	75,	76,	77,	78,	79,	 70,
				81,	82,	83,	84,	85,	86,	87,	88,	89,	 90,
				91,	92,	93,	94,	95,	96,	97,	98,	99,	100
			       };

	unsigned int rr[]  = { 1, 3 };
	unsigned int spr[] = { 4, 8 };

	Sampler s( 2, rr, spr );
	CVGreyc::NDArray::CArray<double> data( _data, 10, 10 );
	CVGreyc::NDArray::CArray<double> res( s.nbSamples() );

	s( data, 5, 4, res ); // = case 55

	// Basic output
	/*
	for( vector< vector<double> >::iterator i = res->begin() ; i != res->end() ; i++ )
	{
		cout<<*i<<"\t";
	}
	*/

	// Pretty output

	set<double> content;

	for( unsigned int J = 0 ; J < res.shape(0) ; J++ )
	{
		content.insert(res(J));
	}

	for( unsigned int i = 0 ; i<10 ; i++ )
	{
		for( unsigned int j = 0 ; j<10 ; j++ )
		{
			if( content.count( data(i,j) ) )
			{
				cout<<" "<<data(i,j)<<"\t";
			}
			else
			if( i == 5 and j == 4 ) // Centre
			{
				cout<<"["<<data(i,j)<<"]\t";
			}
			else
			{
				cout<<"   \t";
			}
		}
		cout<<endl<<endl<<endl;
	}
	
	return 0;
}
